"""
启动一个线程的成本是比较高的,因为涉及与操作系统的交互,使用线程池可以很好的优化提高性能,
"""

from concurrent.futures import ThreadPoolExecutor
import time

def tack(i):
    print(f"任务{i}开始")
    time.sleep(i)
    print(f"任务{i}结束")
    return i

pool = ThreadPoolExecutor(100) # 创建维护十个线程池,就只有十个能跑，如果还有其他任务得等其他线程执行完才能分配线程来执行

start = time.time()
# pool.submit(tack,1)
# pool.submit(tack,2)
# pool.submit(tack,3)

lis = []
for i in range(1,3):
   # 线程池技术实现异步,完成并发
    res = pool.submit(tack,i)
    res.result() # 当线程执行完毕会立刻把返回到result里
    res.done() # 返回布尔值,如果为true已返回值,反之没有
    lis.append(res)

pool.shutdown() # 阻塞等待，如果线程任务没有执行完毕不会跑后面的代码

print(time.time()-start)  # 三个任务总耗时3秒

"""
同步实现串行
异步实现并发

"""

print([i.result() for i in lis])